package org.springleaf.core.mvc.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.SessionFactory;

/**
 * 数据基本的操作接口
 * @author leaf
 */
public interface BaseDao {

	/**
	 * 通过ID获得对象
	 */
	<T>T get(Class<T> classz,Serializable id);

	/**
	 * 保存对象
	 */
	Object save(Object obj);

	/**
	 * 更新对象
	 */
	void update(Object obj);

	/**
	 * 删除对象
	 */
	void delete(Object obj);
	
	/**
	 * 加载对象
	 */
	void initialize(Object obj);

	/**
	 * 执行hql查询语句,params可以为NULL
	 */
	List<?> query(String hql, Object[] params);

	/**
	 * 执行hql查询语句,params可以为NULL,start开始位置,limit记录最大数量
	 */
	List<?> queryAsRow(String hql, int start, int limit, Object[] params);

	/**
	 * 执行hql更新语句,params可以为NULL
	 */
	void executeUpdate(String hql, Object[] params);

	/**
	 * 执行hql查询语句,返回第一个结果,params可以为NULL
	 */
	Object get(String sql, Object[] params);
	
	/**
	 * 得到SessionFactory
	 */
	SessionFactory getSessionFacotry();
	
}
